/* 
1 获取用户的收货地址
  1 绑定点击事件
  2 调用小程序内置 api  获取用户的收货地址  wx.chooseAddress

  2 获取 用户 对小程序 所授予 获取地址的  权限 状态 scope
    1 假设 用户 点击获取收货地址的提示框 确定  authSetting scope.address 
      scope 值 true 直接调用 获取收货地址
    2 假设 用户 从来没有调用过 收货地址的api 
      scope undefined 直接调用 获取收货地址
    3 假设 用户 点击获取收货地址的提示框 取消   
      scope 值 false 
      1 诱导用户 自己 打开 授权设置页面(wx.openSetting) 当用户重新给与 获取地址权限的时候 
      2 获取收货地址
    4 把获取到的收货地址 存入到 本地存储中 
2 页面加载完毕
  0 onLoad  onShow 
  1 获取本地存储中的地址数据
  2 把数据 设置给data中的一个变量
3 onShow 
  0 回到了商品详情页面 第一次添加商品的时候 手动添加了属性
    1 num=1;
    2 checked=true;
  1 获取缓存中的购物车数组
  2 把购物车数据 填充到data中
4 全选的实现 数据的展示
  1 onShow 获取缓存中的购物车数组
  2 根据购物车中的商品数据 所有的商品都被选中 checked=true  全选就被选中
5 总价格和总数量
  1 都需要商品被选中 我们才拿它来计算
  2 获取购物车数组
  3 遍历
  4 判断商品是否被选中
  5 总价格 += 商品的单价 * 商品的数量
  5 总数量 +=商品的数量
  6 把计算后的价格和数量 设置回data中即可
6 商品的选中
  1 绑定change事件
  2 获取到被修改的商品对象
  3 商品对象的选中状态 取反
  4 重新填充回data中和缓存中
  5 重新计算全选。总价格 总数量。。。
7 全选和反选
  1 全选复选框绑定事件 change
  2 获取 data中的全选变量 allChecked
  3 直接取反 allChecked=!allChecked
  4 遍历购物车数组 让里面 商品 选中状态跟随  allChecked 改变而改变
  5 把购物车数组 和 allChecked 重新设置回data 把购物车重新设置回 缓存中 
8 商品数量的编辑
  1 "+" "-" 按钮 绑定同一个点击事件 区分的关键 自定义属性 
    1 “+” "+1"
    2 "-" "-1"
  2 传递被点击的商品id goods_id
  3 获取data中的购物车数组 来获取需要被修改的商品对象
  4 当 购物车的数量 =1 同时 用户 点击 "-"
    弹窗提示(showModal) 询问用户 是否要删除
    1 确定 直接执行删除
    2 取消  什么都不做 
  4 直接修改商品对象的数量 num
  5 把cart数组 重新设置回 缓存中 和data中 this.setCart
9 点击结算
  1 判断有没有收货地址信息
  2 判断用户有没有选购商品
  3 经过以上的验证 跳转到 支付页面！ 
 */
import { getSetting, chooseAddress, openSetting, showModal ,showToast} from "../../utils/asyncWx.js";
import {sendServer, sendServerGet} from '../../request/common.js'
import regeneratorRuntime from '../../lib/runtime/runtime';
import { updateCart,getGoodsList } from '../../request/module.js'
Page({
  data: {
    result:[],
    address: {},
    cart: [],
    checkedAll: false,
    totalPrice: 0,
    totalNum: 0,
    // tempfilePath:'http://localhost:8080/img/',
    tempfilePath:'http://192.168.0.103:8080/img/',

    products:[],
    lHeight:0,
    rHeight:0,
    lList:[],
    rList:[],
  },
  onLoad(e){
    this.getGoodList()
  },
  getGoodList(){
    getGoodsList().then((res)=>{
      let pro=res.extend.goodsList.slice(20,60)
      this.setData({
        products:pro
      })
    })
  },
  showGoodsDetail(options){
    let goodsId = options.currentTarget.dataset.id;
    wx.navigateTo({
      url: '/pages/goods_detail/index?id='+goodsId,
    })
  },
  imgLoad:function(e){
    var lList = this.data.lList;
    var rList = this.data.rList;
    var lHeight = this.data.lHeight;
    var rHeight = this.data.rHeight;
    if (lHeight == rHeight || rHeight > lHeight){
      lList.push(e.currentTarget.dataset.product);
      lHeight += e.detail.height / e.detail.width;
      this.setData({
        lList,
        lHeight
      })
    }else{
      rList.push(e.currentTarget.dataset.product);
      rHeight += e.detail.height / e.detail.width;
      this.setData({
        rList,
        rHeight
      })
    }
  },
  onShow() {
    let userId=wx.getStorageSync('userInfo').id
    this.getCartList(userId)
  },
  onChange(event) {
    this.setData({
      result: event.detail,
    });
    console.log(this.data.result)
    if(this.data.result.length == this.data.cart.length){
      this.setData({
        checkedAll:true
      })
    }else{
      this.setData({
        checkedAll:false
      })
    }
    let totalPrice=0;
    let list=[]
    this.data.cart.forEach(item=>{
      this.data.result.forEach(item0=>{
        if(item0==item.id){
          list.push(item)
        }
      })
    })
    list.forEach(item=>{
      totalPrice+=item.quantity*item.goods.sellPrice
    })
    this.setData({
      totalPrice:totalPrice
    })
  },
  allCheck(event){
    this.setData({
      checkedAll: event.detail,
    });

    let result = this.data.cart.map(item=>{
      return item.id.toString()
    })
    this.setData({
      result:result
    })
    if(!this.data.checkedAll){
      this.setData({
        result:[]
      })
    }
    let totalPrice=0;
    let list=[]
    this.data.cart.forEach(item=>{
      this.data.result.forEach(item0=>{
        if(item0==item.id){
          list.push(item)
        }
      })
    })
    list.forEach(item=>{
      totalPrice+=item.quantity*item.goods.sellPrice
    })
    this.setData({
      totalPrice:totalPrice
    })
  },


  getCartList(id){
    let params={},send={};
    let userId=id;
    send.userId=userId;
    if(userId !=null || userId != undefined){
      params.send=send;
      params.url="cart/showCart";
      sendServer(params,(commRes)=>{
        console.log(commRes)
        if(commRes.code==100){
          commRes.extend.cartList.forEach((item)=>{
            item.choosed=false;//给每个商品添加一个choosed属性，来判断是否需要拿到
            item.sum=item.quantity*item.goods.sellPrice
          })
          this.setData({
            cart:commRes.extend.cartList
          })
        }
      })
    }else{

    }
  },

  // 点击 收货地址
  async handleChooseAddress() {
    try {
      // 1 获取 权限状态
      const res1 = await getSetting();
      const scopeAddress = res1.authSetting["scope.address"];
      // 2 判断 权限状态
      if (scopeAddress === false) {
        await openSetting();
      }
      // 4 调用获取收货地址的 api
      let address = await chooseAddress();
      address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;

      // 5 存入到缓存中
      wx.setStorageSync("address", address);

    } catch (error) {
      console.log(error);
    }
  },
  
  

  // 商品数量的编辑功能
  async handleItemNumEdit(e) {
    const { operation, id } = e.currentTarget.dataset;
    console.log(operation,id)
    let { cart } = this.data;
    const index = cart.findIndex(v => v.id === id);
    // 4 判断是否要执行删除
    if (cart[index].quantity === 1 && operation === -1) {
      // 4.1 弹窗提示
      const res = await showModal({ content: "您是否要删除？" });
      if (res.confirm) {
        this.deleByBatch(id);
        for(let i=0;i<this.data.result.length;i++){
          if(this.data.result[i]==id){
            this.setData({
              totalPrice:this.data.totalPrice-cart[index].goods.sellPrice
            })
            this.data.result.splice(i,1)
            this.setData({
               result:this.data.result
            })
          }
        }
        cart.splice(index,1)
        this.setData({
          cart:cart
        })
      

      }
    } else {
      // 4 进行修改数量
      cart[index].quantity += operation;
      updateCart(id,cart[index].quantity).then((res)=>{
      })
      this.setData({
        cart:cart
      })
      this.data.result.forEach(item=>{
        if(item==id){
          if(operation== -1){
            this.setData({
              totalPrice:this.data.totalPrice-cart[index].goods.sellPrice
            })
          }else{
            this.setData({
              totalPrice:this.data.totalPrice+cart[index].goods.sellPrice
            })
          }
        }
      })

    
    }
  },
  deleByBatch(id){
    let params={},send={}
    send.ids=id;
    params.send=send;
    params.url="cart/deleteByBatch"
    sendServerGet(params,(commRes)=>{
      if(commRes.code==100){
        wx.showToast({
          title: '删除成功',
        })
      }
    })
  },
  // 点击 结算 
  async handlePay(){
    // // 2 判断用户有没有选购商品
    // if(totalNum===0){
    //   await showToast({title:"您还没有选购商品"});
    //   return ;
    // }
    // 3 跳转到 支付页面
    let listItem=[];
    let result=this.data.result;
    this.data.cart.forEach(item=>{
      result.forEach(item0=>{
        if(item.id==item0){
          listItem.push(item)
        }
      })
    })
    wx.navigateTo({
      url: '/pages/pay/index?cartInfo='+JSON.stringify(listItem)+'&allPrice='+this.data.totalPrice
    });
  }
})